在nest.js讀取URL Param、Query String及Body資料很直觀。
先把Server跑起來
yarn start:dev
然後準備fake data
// fake data
inMemoryUsers = [
{
id: 2,
username: '測試2',
email: 'test2@test.com',
},
{
id: 3,
username: '測試3',
email: 'test3@test.com',
},
];
及傳遞資料的DTO(Data Transfer Object)物件
export class UserDTO{
username: string;
email: string;
}
以常見的id為例
/id
在Controller底下新增getUserById方法如下:
@Get(':userId')
getUserById(@Param('userId') id){
const userFromMemory = this.inMemoryUsers.find((user) => user.id === parseInt(id, 10)); //解析後都是字串,要使用parseInt傳成number
const resUser = new UserDTO();
resUser.username = userFromMemory.username;
resUser.email = userFromMemory.email;
return resUser;
}
@Get(':userId')意思是controller解析網址的時候,把最後一個url segment視作userId變數,透過@Param('路由變數')把數值指定給id,之後拿id來做搜尋使用者資料。
用Postman測試結果如下:
以分頁為例,Query String包含page與size兩個變數
/?page=1&size=20
在Controller底下新增queryedList方法如下
@Get()
queryedList(@Query() query): string {
return query;
}
@Query()會把Query String解析成javascript物件,Postman測試結果如下:
以新增使用者為例,
修改昨日的create方法如下:
@Post()
create(@Body() userDTO: UserDTO){ // userDTO: UserDTO代表userDTO是UserDTO型別
return `使用者:${userDTO.username}已建立`;
}
用@Body來接收來自Request body的資料,Postman測試結果如下: